/*
 Modulo para busqueda de productos
 Creado por Carlos Pastelin Morales 
 29/12/2014
 */
package Vistas;

import Controlador.Conexion;
import Controlador.SrvProducto;
import Vistas.Interface;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.EventObject;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractCellEditor;
import javax.swing.JOptionPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.SpinnerListModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;

public class BuscarProducto extends javax.swing.JDialog {
/*Inicializamos las variables a utilizar*/
    Conexion con;
    ResultSet rs;
    Interface vista;
    public static float total = 0;
    public static int rowCount, numfac;
    public static int j = 0;
    SrvProducto control = new SrvProducto(this);
    SrvProducto control2 = new SrvProducto(vista);
    DecimalFormat format = new DecimalFormat("0.00");
    public static String id;

    public BuscarProducto(java.awt.Frame parent, boolean modal) {//C.P.M Inicalizamos la forma en modo modal
        super(parent, modal);
        initComponents();
    }

    public void setVentana(Interface view) {//C.P.M le enviamos la vista 
        this.vista = view;//C.P.M le asignamos la vista a la variable instanciada para poder tener contro de la interface
    }
/*Esta es la clase donde instanciamos el sipinner para cambiar la cantidad dentro de la tabla*/
    class SpinnerEditor extends AbstractCellEditor implements TableCellEditor {

        final JSpinner spinner = new JSpinner();//C.P.M instanciamos el spinner

        public SpinnerEditor(String[] items) {//C.P.M le damos los datos que contendra el spiner
            spinner.setModel(new SpinnerListModel(Arrays.asList(items)));
        }

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
                int row, int column) {//C.P.M Aqui insertamos el spinner dentro de la tabla
            spinner.setValue(value);
            return spinner;
        }

        public boolean isCellEditable(EventObject evt) {//C.P.M atrapamos el evento de la tabla para cuando le de click se muestre eel spinner
            if (evt instanceof MouseEvent) {
                return ((MouseEvent) evt).getClickCount() >= 1;
            }
            return true;
        }

        public Object getCellEditorValue() {
            return spinner.getValue();
        }

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jTvnombre = new javax.swing.JTextField();
        jLabel32 = new javax.swing.JLabel();
        jScrollPane4 = new javax.swing.JScrollPane();
        Tproductos = new javax.swing.JTable();
        jBventa = new javax.swing.JButton();
        jBSalir = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenuItem2 = new javax.swing.JMenuItem();

        setTitle("Buscar producto");
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });

        jTvnombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTvnombreKeyReleased(evt);
            }
        });

        jLabel32.setFont(new java.awt.Font("Verdana", 1, 12)); // NOI18N
        jLabel32.setText("Nombre Producto:");

        Tproductos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        jScrollPane4.setViewportView(Tproductos);

        jBventa.setText("Agregar");
        jBventa.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBventaActionPerformed(evt);
            }
        });

        jBSalir.setText("Salir");
        jBSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBSalirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(jLabel32)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jTvnombre, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 760, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addComponent(jBventa, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jBSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(11, 11, 11))))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTvnombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel32))
                .addGap(10, 10, 10)
                .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jBventa, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jBSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(24, Short.MAX_VALUE))
        );

        jMenu1.setText("Archivo");

        jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        jMenuItem1.setText("Cancelar");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem1);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Info");

        jMenuItem2.setText("Acerca de...");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItem2);

        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
/*Confirmamos el cerrar la forma con el usuario*/
    if (JOptionPane.showConfirmDialog(rootPane, "Estás seguro de cerrarla?", "Cerrar aplicación", 1) == 0) {
        this.dispose();
    }
}//GEN-LAST:event_jMenuItem1ActionPerformed

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
    JOptionPane.showMessageDialog(rootPane, "Realizado por:\n Nombres");//C.P.M Aqui mostraremos la informacion  de la empresa
}//GEN-LAST:event_jMenuItem2ActionPerformed

    private void jTvnombreKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTvnombreKeyReleased
        control.buscaxnombre();//C.P.M consumimos el metodo de buscar nombre cada ve que insertemos una nueva letra
    }//GEN-LAST:event_jTvnombreKeyReleased

    private void jBventaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBventaActionPerformed
/*Aqui mandamos la informacion a la interface*/
        int aux = Tproductos.getSelectedRow();//C.P.M obtenemos si esta seleccionado un producto de la tabla
        if (aux == -1) {//C.P.M si es igual a menos uno es que no se a seleccionado nada
            JOptionPane.showMessageDialog(null, "No se a seleccionado nada de la tabla.");//C.P.M lo notificamos a el usuario
        } else {//C.P.M de lo contrario se a seleccionado el producto a insertar a la venta
            String nombre = Tproductos.getValueAt(aux, 2).toString();//C.P.M obtenemos el nombre
            float precio = Float.parseFloat(Tproductos.getValueAt(aux, 3).toString());//C.P.M el presio
            String precioformato = format.format(precio);//C.P.M le damos el formato nesesario a el precio
            float totalPro = Float.parseFloat(precioformato);//C.P.M obtenemos el total
            String cant = JOptionPane.showInputDialog(null, "Cantidad: ");//C.P.M la cantidad
            float cantidad = Float.parseFloat(cant);//C.P.M pasalos a flotante la cantidad
            totalPro = totalPro * cantidad;//C.P.M calculamos el total del producto por la cantidad
            total = Float.parseFloat(vista.jTtotal.getText());//C.P.M obtenemos el total de la venta
            total = totalPro + total;//C.P.M le sumamos el total del prducto nuevo con el total de la venta
            String totalaenviar = format.format(total);//C.P.M le damos el formato a el total para enviarlo a la interface
            vista.jTtotal.setText(totalaenviar);//C.P.M le asignamos el nuevo total a a la vista
            DefaultTableModel temp = (DefaultTableModel) vista.Tlista.getModel();//C.P.M obtenemos el modelo de la tabla de ventas
            Object[] fila = new Object[3];//C.P.M creamos arreglo de objetos 
            fila[0] = cant;//C.P.M asignamos la cantidad
            fila[1] = nombre;//C.P.M el nombre
            fila[2] = precioformato;//C.P.M el precio 
            temp.addRow(fila);//C.P.M agregamos los valores a la tabla como una nueva fila
            TableColumn col = vista.Tlista.getColumnModel().getColumn(0);//C.P.M obtenemos la columna 
            String[] values = new String[100];//C.P.M instanciamos un arreglo de strings
            for (int i = 1; i < 100; i++) {//C.P.M aqui asignamos los valores a el arreglo estos valores son los que tendra el spinner 
                values[i] = new String(Integer.toString(i));//C.P.M para cambiar el spinner de 1 al 100
            }
            col.setCellEditor(new SpinnerEditor(values));//C.P.M insertamos el spinner
            vista.Tlista.setModel(temp);//C.P.M le enviamos el modelo
            this.dispose();//C.P.M y cerramos la forma
        }

    }//GEN-LAST:event_jBventaActionPerformed

    private void jBSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBSalirActionPerformed
        dispose(); //C.P.M cerramos la forma 
    }//GEN-LAST:event_jBSalirActionPerformed

    private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
        control.buscaxnombre(); //C.P.M mandamos a poblar la tabla al iniciar la forma
    }//GEN-LAST:event_formWindowOpened

    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(BuscarProducto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(BuscarProducto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(BuscarProducto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(BuscarProducto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new BuscarProducto(new javax.swing.JFrame(), true).setVisible(true);
            }
        });

    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    public javax.swing.JTable Tproductos;
    private javax.swing.JButton jBSalir;
    private javax.swing.JButton jBventa;
    private javax.swing.JLabel jLabel32;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane4;
    public javax.swing.JTextField jTvnombre;
    // End of variables declaration//GEN-END:variables
}
